package com.tedu.api.ee;

import org.junit.Test;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;

/**
 * 流---传输数据---传输数据过程绝对不能出错【处理手段】
 * 标准流结合异常---标准io
 *
 * 异常
 * Java面向对象语言，程序当中所出现所有错误，定义为对象【处理对应错误】
 *
 * Throwable  顶级异常超类
 *
 * Exception异常：描述程序级别的错误---有解决方案
 *               编译期：--RonTimeException异常表示类--
 *                     FileOutputStream 创建对象---波浪线---抛出方法之外
 *                检查异常：通常都是编译器检查处理，程序直接报错，抛出
 *                解决方案：①捕获异常（*）
 *                        ②抛出异常---抛出方法之外--打印控制台
 *
 *               运行期：控制台直接显示异常对象【异常对象名字，解决方案 产生原因】
 *                  非检查异常：控制台直接输出异常对象 RunTimeException
 *
 *                 最后了解 【throw与throws---RunTimeException】
 *
 *
 * Error错误：描述系统级别的错误---出现---程序宕机
 *           非常低--->递归问题：自己调自己【方法】--->
 */
public class EE {
    /**
     * Error  错误----程序严重错误
     * 模拟： 方法调方法---栈溢出错误
     * StackOverflowError栈溢出错误
     * ------程序宕机------9亿账号
     * while(true){
     *     拼接字符串对象
     * }
     */
    public static void method(){
        method();
    }
    @Test
    public void testError(){
        EE.method();
    }

    /**
     * Exception异常：检查异常【出现编译期】-----代码报波浪线
     *               两种处理手段：①捕获异常
     *                           语法：try{
     *                               怀疑代码可能有异常或提示异常
     *                           }catch(小异常名字 e){
     *                               e.printStacktrace(); 打印异常信息
     *                           }catch(中异常名字 e){
     *      *                        e.printStacktrace(); 打印异常信息
     *      *                    }catch(大异常名字 e){  Exception
     *      *                        e.printStacktrace(); 打印异常信息
     *      *                           }finally{
     *                                       一定执行代码块
     *                                     }
     *                                     快捷键：ctrl+alt+T
     *
     *
     *                          ②抛出异常   throws 异常名字【并未解决】
     *                          考试题：throw与throws区别
     *                          异常关键字：throw
     *                                    throws
     *              非检查异常【出现运行期】----代码无错误---控制台
     * -------------------------------
     * 名字：   FileNotFoundException 文件不存在异常
     * 产生原因： 路径写错，文件名写错
     *
     *         NullPointerException  空指针异常
     * 产生原因：获取字符串为空  数组： 值为空   集合：元素为空 【存在null值】
     *        1+null
     *
     *        StringIndexOutOfBoundsException 字符串下标越界
     * 产生原因：字符串下标没有对应的字符
     *
     *        NumberFormatException  数字转换异常
     * 产生原因：字符串不是正确的类型
     */
    @Test
    public void testException() throws FileNotFoundException {
        //检查异常【出现编译期】-----代码报波浪线
       // FileOutputStream fis=new FileOutputStream("");
       // 非检查异常【出现运行期】----代码无错误---控制台
        try {
            String str="a";
            str.length();
            str.charAt(1);
            Integer.parseInt(str); //解析字符串---转换为对应类型
        }catch(StringIndexOutOfBoundsException e){
            e.printStackTrace();//打印异常对象的信息
            System.out.println("字符串当中的小异常：下标越界异常");
        }
        catch (NumberFormatException e) {
            e.printStackTrace();   //打印异常
            System.out.println("字符串当中的小异常");
        }
         catch (Exception e){
            e.printStackTrace();
             System.out.println("大异常---");
         }
        finally{
            System.out.println("一定会执行的代码块");
        }
    }

    /**
     * 作业1:写出5个【非检查异常错误】异常的代码实例
     * 提示：查API----java.long.异常
     *      字符串.包装类.集合.IO流
     */
    @Test
    public void testHomeWork1(){
         //异常1. ArithmeticException 数学运算异常
       /* int T1=10;
        int G2=0;
        System.out.println(T1/G2);*/

        //异常2. ClassCastException 类型转换异常
     /*  Exception e=new Exception();
       RuntimeException r= (RuntimeException) e;
        System.out.println("");*/

        //异常3 ArrayIndexOutOfBoundsException 数组越界异常
     /* int[] arr = new int[0];
        System.out.println(arr[0]);*/

        //异常4 ArrayStoreException 数组存储异常
       /* Object[] stringArray = new String[10];
        stringArray[0] = "hello";
        stringArray[1] = 100;*/

        //异常5 IndexOutOfBoundsException 索引越界异常
        /*int[] array = new int[5];
        int index = 5;
        array[index] = 10;*/


    }




       
       
}


    



